Some modem computers use error recovery techniques to automatically correct corrupted data read from a memory subsystem. In one error recovery technique, for example, error correction codes (ECCs) are stored in the memory subsystem along with each data value. When a data value is written to memory in a computer system that uses an ECC-based error recovery technique, the data value is passed through combinatorial logic to generate an ECC value. The ECC value may be thought of as a signature that corresponds to the original data value and is stored in memory along with the data value. Later, when the data value is read from memory, the ECC value is output along with the data value and both the ECC and data values are input to a syndrome generator. The syndrome generator generates a value called a syndrome that is typically zero-valued if the data value has not become corrupt and non-zero otherwise. (Herein, a corrupt data value refers to a data value in which one or more bits have become inverted relative to their correct state.)
The syndrome is input to flip vector generator where it is used to index a table of values called flip vectors. In a system that is capable of correcting a single bit error, the table of flip vectors typically includes one entry for every possible bit position in a data value, with each entry having a single set bit in a different bit position than the other entries. Thus, by exclusive-OR combination of a data value having a single bit error and the appropriate flip vector, the failed bit is flipped to recover the original data value. Because the error correction typically takes place in the transmission path between the memory and the consumer of the data value (e.g., a processor, graphics accelerator, etc.), the error correction is transparent to the consumer.
One limitation to the above-described error recovery technique is that, if the source of data corruption is the value stored in memory (due, for example, to a transient event during transfer of the data value to the memory or while the data value is stored in the memory), then correction of a single bit failure when the data value is read from the memory does not correct the corrupted value in the memory itself. In other words, even though a recovered data value is delivered to a consumer, the data value in the memory subsystem remains corrupted. This is significant because many computer systems employ error recovery techniques that can correct a single bit error, but not a multiple bit error. Consequently, in such systems, if one or more additional bits of an already corrupt data value are erroneously flipped, the data value will have become irrecoverably corrupt.